home *** CD-ROM | disk | FTP | other *** search
- /* Copyright 1992 H.Ogasawara(COR.) */
-
- /* protocol test */
-
- #include <stdio.h>
- #include "proto.h"
-
- int RETRY= 10;
-
- WriteCode( code )
- {
- unsigned int time= ONTIME()+60*100;
- while( !OSNS232C() ){
- if( B_KEYSNS() ){
- if( (B_KEYINP()&0xff) == 0x03 )
- return -1;
- }else if( ONTIME() > time )
- return -1;
- }
- OUT232C( code );
- return 0;
- }
-
- WritePack( pack, len )
- unsigned char *pack;
- {
- while( len-- ){
- if( WriteCode( *pack++ ) < 0 )
- return -1;
- }
- return 0;
- }
-
- ReadCode( time )
- unsigned int time;
- {
- time+= ONTIME();
- while( !ISNS232C() ){
- if( B_KEYSNS() ){
- if( (B_KEYINP()&0xff) == 0x03 )
- return -1;
- }else if( ONTIME() > time )
- return -2;
- }
- return INP232C() & 0xff;
- }
-
- ReadPack( pack, len )
- unsigned char *pack;
- {
- while( len-- ){
- short cd;
- if( (cd= ReadCode( 60*100 )) < 0 )
- return -1;
- *pack++= cd;
- }
- return 0;
- }
-
- WaitCode( code, time )
- unsigned short code;
- unsigned int time;
- {
- short cd;
- do{
- if( (cd= ReadCode( time )) < 0 )
- return cd;
- if( cd == CAN )
- return -1;
- }while( code && cd != code );
- return cd;
- }
-
- Send_x128sum( fp )
- FILE *fp;
- {
- unsigned char pack[MAXBUF],
- buf[MAXBUF];
- unsigned short block= 1;
- if( WaitCode( NAK, 60*100 ) < 0 )
- return -1;
- do{
- short cd;
- unsigned int len;
- unsigned short i= 0;
- fread( buf, 1, 128, fp );
- len= DataPack( block++ & 0xff, pack, buf, X128SUM );
- if( WritePack( pack, len ) < 0 )
- return -1;
- printf( "Write block = %d\n", block-1 );
- do{
- if( (cd= WaitCode( 0, 10*100 )) < 0 )
- return -1;
- if( ++i >= RETRY )
- return -1;
- }while( cd == NAK );
- }while( !feof( fp ) );
- puts( "EOT write." );
- if( WriteCode( EOT ) < 0 )
- return -1;
- WriteCode( EOT );
- WriteCode( EOT );
- WriteCode( EOT );
- if( WaitCode( ACK, 10*100 ) < 0 )
- return -1;
- return 0;
- }
-
- Rece_x128sum( fp )
- FILE *fp;
- {
- short cd;
- unsigned char pack[MAXBUF];
- do{
- if( WriteCode( __C ) < 0 )
- return -1;
- puts( "Send __C" );
- if( (cd= WaitCode( 0, 10*100 )) == -1 )
- return -1;
- }while( cd == -2 );
- goto cdd;
- for(;;){
- unsigned int len;
- do{
- cd= ReadCode( 10*100 );
- if( cd == CAN )
- return -1;
- if( cd == EOT ){
- WriteCode( ACK );
- return 0;
- }
- }while( cd < 0 || (cd != SOH && cd != STX) );
- cdd:
- *pack= cd;
- len= ReadPack( pack+1, 128+5-1 );
- if( DataUnpack( pack, 0 ) < 0 ){
- printf( "Read block = %d ERR\n", pack[1] );
- WriteCode( NAK );
- }else{
- printf( "Read block = %d\n", pack[1] );
- WriteCode( ACK );
- fwrite( pack+SKIP, 128, 1, fp );
- }
- }
- }
-
-
- main( argc, argv )
- unsigned char **argv;
- {
- short send= 0;
- FILE *fp;
- unsigned char *fname= NULL;
- while( --argc ){
- if( **++argv == '-' ){
- switch( *++*argv ){
- case 's':
- send= 1;
- break;
- }
- }else
- fname= *argv;
- }
- if( send ){
- if( fp= fopen( fname, "rb" ) ){
- send= Send_x128sum( fp );
- fclose( fp );
- if( send < 0 )
- puts( "Break!" );
- else
- puts( "Ok!" );
- }else
- puts( "read open error." );
- }else{
- if( fp= fopen( fname, "wb" ) ){
- send= Rece_x128sum( fp );
- fclose( fp );
- if( send < 0 )
- puts( "Break!" );
- else
- puts( "Ok!" );
- }else
- puts( "write open error." );
- }
- }
-
-